package cn.simon.free.redis.mq.annotations;

import cn.simon.free.redis.mq.enums.ConsumerType;
import cn.simon.free.redis.mq.enums.MessageType;
import org.springframework.stereotype.Component;

import java.lang.annotation.*;

/**
 * redis 消息队列(默认开启多线程消费,线程数量为2)
 *
 * @author simon
 * @date 2021/7/1 11:45
 * @copyright:
 * @modifier
 * @motto a no talent, people who have to study hard
 */
@Documented
@Inherited
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Component
public @interface RedisMessageConsumer {

    /**
     * 消息模式(没啥用,仅展示作用)
     *
     * @return
     */
    MessageType messageType() default MessageType.NONE;

    /**
     * 客户端消费模式
     *
     * @return
     */
    ConsumerType consumerType();

    /**
     * 队列名称
     */
    String queueName();

    /**
     * 是否是单线程消费,默认为否.
     *
     * @return
     */
    boolean singleThreadProcess() default false;

    /**
     * 默认的核心线程数,且永不过期（因为消息队列槽数要等于线程数,所以只有核心线程数）。不同于其他消息中间件,因为使用的redisson的sortedSet
     * 变向的使用消息中间件。
     *
     * @return
     */
    int corePoolSize() default 4;

}
